import { Store } from 'vuex'
import { AllStateType } from '@/store/storeType'
import { computed, onMounted, Ref, watch } from 'vue'
import { paginationObjProps } from './CategoriesDefaults'
const CategoriesInitFn = (store: Store<AllStateType>, paginationObj: paginationObjProps, new_data: Ref<any>) => {
  const categoriesPageObj = computed(() => store.state.categoriesModule.categoriesPageObj)

  onMounted(() => {
    if (store.state.categoriesModule.categoriesPageObj[paginationObj.pageNum]) {
      paginationObj.pageSize = store.state.categoriesModule.categoriesPageObj[paginationObj.pageNum].pagesize
      paginationObj.pageNum = store.state.categoriesModule.categoriesPageObj[paginationObj.pageNum].pagenum
      paginationObj.total = store.state.categoriesModule.categoriesPageObj[paginationObj.pageNum].total
    } else {
      store.dispatch('getCategoriesPage', { type: paginationObj.type, pageSize: paginationObj.pageSize, pageNum: paginationObj.pageNum }).then(res => {
        const { pagenum, pagesize, total } = res.data.data
        paginationObj.pageSize = pagesize
        paginationObj.pageNum = pagenum
        paginationObj.total = total
      })
    }
  })

  watch(paginationObj, () => {
    if (!(categoriesPageObj.value[paginationObj.pageNum] && categoriesPageObj.value[paginationObj.pageNum].pagesize === paginationObj.pageSize)) {
      store.dispatch('getCategoriesPage', { type: paginationObj.type, pageSize: paginationObj.pageSize, pageNum: paginationObj.pageNum }).then(() => new_data.value = categoriesPageObj.value[paginationObj.pageNum].result)
    } else {
      new_data.value = categoriesPageObj.value[paginationObj.pageNum].result
    }
  })

}

export default CategoriesInitFn